package com.srmt.document.feishu.internal.table;

import com.srmt.document.exception.TableException;
import com.srmt.document.feishu.internal.table.model.TableContext;

/**
 * 表格结构操作策略接口
 * 
 * 定义表格结构相关的操作，包括行列删除、单元格合并等。
 * 
 * @author srmt
 * @since 5.0.0
 */
public interface TableStructureStrategy extends TableStrategy {
    
    /**
     * 删除表格行
     * 
     * @param context 表格上下文
     * @param startRow 起始行索引（从1开始）
     * @param endRow 结束行索引（包含，从1开始）
     * @throws TableException 如果删除失败
     */
    void deleteTableRows(TableContext context, int startRow, int endRow) throws TableException;
    
    /**
     * 删除表格列
     * 
     * @param context 表格上下文
     * @param startCol 起始列索引（从1开始）
     * @param endCol 结束列索引（包含，从1开始）
     * @throws TableException 如果删除失败
     */
    void deleteTableColumns(TableContext context, int startCol, int endCol) throws TableException;
    
    /**
     * 合并单元格
     * 
     * @param context 表格上下文
     * @param startRow 起始行索引
     * @param startCol 起始列索引
     * @param endRow 结束行索引（包含）
     * @param endCol 结束列索引（包含）
     * @throws TableException 如果合并失败
     */
    void mergeCells(TableContext context, int startRow, int startCol, 
                   int endRow, int endCol) throws TableException;
    
    /**
     * 取消合并单元格
     * 
     * @param context 表格上下文
     * @param startRow 起始行索引
     * @param startCol 起始列索引
     * @param endRow 结束行索引（包含）
     * @param endCol 结束列索引（包含）
     * @throws TableException 如果取消合并失败
     */
    void unmergeCells(TableContext context, int startRow, int startCol,
                     int endRow, int endCol) throws TableException;
    
    /**
     * 验证表格操作是否有效
     * 
     * @param context 表格上下文
     * @return 是否有效
     */
    boolean validateTableOperation(TableContext context);
}